package saco.dao;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


import saco.excepcion.DAOExcepcion;
import saco.excepcion.LoginExcepcion;
import saco.modelo.Apoderado;
import saco.modelo.Coordinador;
import saco.modelo.Director;
import saco.modelo.Docente;
import saco.modelo.Persona;
import saco.util.ConexionBD;

public class UsuarioDAO extends BaseDAO{
	
	public Persona validar(String idUsuario, String clave) throws DAOExcepcion, LoginExcepcion {
		String query = "select IDUSUARIO, USUARIO_NOMBRES, USUARIO_APPATERNO, USUARIO_APMATERNO,"
				+ "USUARIO_TIPO from usuario where IDUSUARIO=? and USUARIO_PASSWORD=?";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		Persona vo = null;
		
		Apoderado ap = null;
		Docente doc = null;
		Coordinador cor = null;
		Director dir = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			stmt.setString(1, idUsuario);
			stmt.setString(2, clave);
			
			rs = stmt.executeQuery();

			if (rs.next()) {
				int tipo = rs.getInt("USUARIO_TIPO");
				
				if(tipo == 1){
					dir = new Director();
					dir.setNombre(rs.getString("USUARIO_NOMBRES"));
					dir.setApPaterno(rs.getString("USUARIO_APPATERNO"));
					dir.setCodigo(rs.getString("IDUSUARIO"));
					dir.setApMaterno(rs.getString("USUARIO_APMATERNO"));
					vo = dir;
				}else if(tipo == 2){
					cor = new Coordinador();
					cor.setNombre(rs.getString("USUARIO_NOMBRES"));
					cor.setApPaterno(rs.getString("USUARIO_APPATERNO"));
					cor.setCodigo(rs.getString("IDUSUARIO"));
					cor.setApMaterno(rs.getString("USUARIO_APMATERNO"));
					vo = cor;
				}if(tipo == 3){
					doc = new Docente();
					doc.setNombre(rs.getString("USUARIO_NOMBRES"));
					doc.setApPaterno(rs.getString("USUARIO_APPATERNO"));
					doc.setCodigo(rs.getString("IDUSUARIO"));
					doc.setApMaterno(rs.getString("USUARIO_APMATERNO"));
					vo = doc;
				}else if(tipo == 4){
					ap = new Apoderado();
					ap.setNombre(rs.getString("USUARIO_NOMBRES"));
					ap.setApPaterno(rs.getString("USUARIO_APPATERNO"));
					ap.setCodigo(rs.getString("IDUSUARIO"));
					ap.setApMaterno(rs.getString("USUARIO_APMATERNO"));
					vo = ap;
				}
				
			} else {
				throw new LoginExcepcion("No existe");
			}
		} catch (LoginExcepcion e) {
			System.err.println(e.getMessage());
			throw new LoginExcepcion(e.getMessage());
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		
		return vo;
	}
}
